home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Libraries / RossettMADF Library / Example.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-18  |  4.7 KB  |  209 lines  |  [TEXT/MMCC]

  1. /********************************************************/
  2. /*
  3.     Player PRO 4.2 -- Music Driver EXAMPLE
  4.  
  5.     Library Version 2.5
  6.  
  7.     To use with MusicLibrary 2.5 for Think C & CodeWarrior
  8.  
  9.     Antoine ROSSET
  10.     16 Tranchees
  11.     1206 GENEVA
  12.     SWITZERLAND
  13.     
  14.     FAX: (41 22) 346 11 97
  15.     Compuserve: 100277,164
  16.     Internet: rosset@dial.eunet.ch
  17. */
  18. /********************************************************/
  19.  
  20. #include "MAD.h"
  21. #include "RDriver.h"
  22. #include "gestaltequ.h"
  23. #include "sound.h"
  24.  
  25. static     Boolean        Stereo, StereoMixing, NewSoundManager, hasASC;
  26.  
  27. main()
  28. {
  29. long            gestaltAnswer, sndSize;
  30. short            myBit, iFileRefI;
  31. NumVersion        nVers;
  32. Point            where = { -1, -1};
  33. SFReply            reply;
  34. SFTypeList        aType;
  35. OSErr            iErr = noErr;
  36. Ptr                tempPtr;
  37. MADPartition    aPartition;
  38. Boolean            End;
  39.  
  40. /***************                    ****************/
  41. /******          Toolbox Initialization      **********/
  42. /***************                    ****************/
  43.  
  44.  
  45. InitGraf( &qd.thePort);
  46. InitFonts();
  47. FlushEvents(everyEvent,0);
  48. InitWindows();
  49. TEInit();
  50. InitMenus();
  51. InitCursor();
  52. MaxApplZone();
  53.  
  54.  
  55.  
  56.  
  57. /***************                    ****************/
  58. /****** HARDWARE IDENTIFICATION AND CHECK **********/
  59. /***************                    ****************/
  60.  
  61. /****************/
  62. /** ASC CHIP ? **/
  63. /****************/
  64.  
  65. Gestalt( gestaltHardwareAttr, &gestaltAnswer);
  66. myBit = gestaltHasASC;
  67. if( BitTst( &gestaltAnswer, 31-myBit) == false) hasASC = false;
  68. else hasASC = true;
  69.  
  70. /**************/
  71. /** STEREO ? **/
  72. /**************/
  73.  
  74. Gestalt( gestaltSoundAttr, &gestaltAnswer);
  75. myBit = gestaltStereoCapability;
  76. Stereo = BitTst( &gestaltAnswer, 31-myBit);
  77.  
  78. /*********************/
  79. /** STEREO MIXING ? **/
  80. /*********************/
  81.  
  82. myBit = gestaltStereoMixing;
  83. StereoMixing = BitTst( &gestaltAnswer, 31-myBit);
  84.  
  85. /****************************/
  86. /** SOUND MANAGER >= 3.0 ? **/
  87. /****************************/
  88.  
  89. nVers = SndSoundManagerVersion();
  90. if( nVers.majorRev >= 3) NewSoundManager = true;
  91. else NewSoundManager = false;
  92.  
  93. /****************************************************/
  94. /****************************************************/
  95.  
  96. /*******************************************************************************************/
  97. /****** MAD Library Initialisation : choose the best driver for the current hardware ******/
  98. /******                                                                                  ******/
  99. /****** Standard initialization with 4 tracks...                                      ******/
  100. /*******************************************************************************************/
  101.  
  102. if( Stereo == true && StereoMixing == true)
  103. {        
  104.     if( NewSoundManager == true)
  105.     {
  106.         if( RInitMusic( SMStereo, 4) != noErr) ExitToShell();
  107.     }
  108.     else if( hasASC == true)
  109.     {
  110.         if( RInitMusic( ASCStereo, 4) != noErr) ExitToShell();
  111.     }
  112.     else if( RInitMusic( SMDSP, 4) != noErr) ExitToShell();
  113. }
  114. else
  115. {        
  116.     if( NewSoundManager == true)
  117.     {
  118.         if( RInitMusic( SMMono, 4) != noErr) ExitToShell();
  119.     }
  120.     else if( hasASC == true)
  121.     {
  122.         if( RInitMusic( ASCMono, 4) != noErr) ExitToShell();
  123.     }
  124.     else DebugStr("\pNo Driver for your Mac!");
  125. }
  126.  
  127. /*********************************/
  128. /*********************************/
  129. /*********************************/
  130.  
  131. /****** Choose a MAD ('MADF') or a MODs ('STrk') File ********/
  132. End = false;
  133.  
  134. while( End == false)
  135. {
  136.     FlushEvents( everyEvent, 0);
  137.     aType[ 0] = 'MADF';
  138.     aType[ 1] = 'STrk';
  139.     SFGetFile( where, "\p", 0L, 2, aType, 0L, &reply);
  140.     
  141.     if( !reply.good) End = true;
  142.     else
  143.     {
  144.         SetVol( 0L, reply.vRefNum);
  145.         
  146.         if( reply.fType == 'STrk')            // **** MOD File ****
  147.         {
  148.             iErr = FSOpen( reply.fName, 0, &iFileRefI);
  149.             if( iErr) DebugStr( "\pProblemo ??");
  150.             
  151.             GetEOF( iFileRefI, &sndSize);
  152.                 
  153.             tempPtr = NewPtr( sndSize);
  154.             FSRead( iFileRefI, &sndSize, tempPtr);
  155.             FSClose( iFileRefI);
  156.                 
  157.             ConvertMod2Mad( tempPtr, sndSize, &aPartition);
  158.             RInstallMADF( aPartition);
  159.                     
  160.             DisposPtr( tempPtr);    tempPtr = 0L;
  161.         }
  162.         else if( reply.fType == 'MADF')     // **** MAD File ****
  163.         {
  164.             /*** To load a MAD File *********/
  165.             if( RLoadMusic( reply.fName) != noErr) Debugger();
  166.             
  167.             /*
  168.                 *** TO OPEN A MAD RESOURCE ***
  169.                 
  170.                 To create a MAD Resource, use Auto-Exec export from Player PRO !!!!
  171.                 And load the resource with: by example...
  172.             
  173.                 RLoadMusicRsrc( 'MADF', 3124); for example...
  174.             */
  175.         }
  176.         else DebugStr("\pUh Uh...");
  177.         
  178.         
  179.         /****************************************/
  180.         /**** Update the tracks number !! *******/
  181.         /****************************************/
  182.         if( theFileInt->Tracks != DriveTrackNo)
  183.         {
  184.             DriveTrackNo = theFileInt->Tracks;
  185.             ChangeTrackNo( DriveTrackNo);
  186.         }
  187.         /****************************************/
  188.         
  189.         RPlayMusic();
  190.         Reading = true;
  191.         
  192.         while( !Button())
  193.         {
  194.             /** Do what you want here....    **/
  195.             /** Bla bla...                    **/
  196.         }
  197.         
  198.         
  199.         RStopMusic();            // Stop music
  200.         CleanDriver();
  201.         
  202.         RClearMusic();            // Dispose the current music
  203.     }
  204. }
  205. RQuitMusic();            // Dispose music driver
  206.  
  207. FlushEvents( everyEvent, 0);
  208. ExitToShell();
  209. }